home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1993 April: Penguin on DISC / ADC Developer CD (1993-04) (''Penguin On DISC'')_iso / Dev.CD Apr 93.iso / Utilities / MPW Interfaces 7.1 Beta / CIncludes / TextServices.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-28  |  16.1 KB  |  483 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        TextServices.h
  3.  
  4.     Contains:    Text Services Manager definitions.
  5.  
  6.     Written by:    Kenny SC. Tung
  7.  
  8.     Copyright:    © 1991-1992 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.  
  13. */
  14.  
  15.  
  16. #ifndef __TEXTSERVICES__
  17. #define __TEXTSERVICES__
  18.  
  19. #ifndef __TYPES__
  20. #include    <Types.h>
  21. #endif
  22.  
  23. #ifndef __EVENTS__
  24. #include    <Events.h>
  25. #endif
  26.  
  27. #ifndef __MENUS__
  28. #include    <Menus.h>
  29. #endif
  30.  
  31. #ifndef __APPLEEVENTS__
  32. #include    <AppleEvents.h>
  33. #endif
  34.  
  35. #ifndef __ERRORS__
  36. #include    <Errors.h>
  37. #endif
  38.  
  39.  
  40. #ifndef __COMPONENTS__
  41. #include    <Components.h>
  42. #endif
  43.  
  44.  
  45.  
  46. #define        kTSMVersion                    1                /* Version of the Text Services Manager */
  47. #define        kTextService                'tsvc'        /* component type for the component description */
  48. #define        kInputMethodService        'inpm'        /* component subtype for the component description */
  49.  
  50. #define        bTakeActiveEvent            15                /* bit set if the component takes active event */
  51. #define        bScriptMask                    0x00007F00    /* bit 8 - 14 */
  52. #define        bLanguageMask                0x000000FF    /* bit 0 - 7  */
  53. #define        bScriptLanguageMask        bScriptMask+bLanguageMask    /* bit 0 - 14  */
  54. /*    •• ************************************** ••  */
  55.  
  56.  
  57. /* Hilite styles ... */
  58. typedef enum {
  59.     kCursorPosition                =    1,                    /* specify cursor position */
  60.     kRawText                            =    2,                    /* specify range of raw text */
  61.     kSelectedRawText                =    3,                    /* specify range of selected raw text */
  62.     kConvertedText                    =    4,                    /* specify range of converted text */
  63.     kSelectedConvertedText        =    5                    /* specify range of selected converted text */
  64. } HiliteStyleType;
  65.  
  66. /*    •• ************************************** ••  */
  67.  
  68.  
  69. /* Apple Event constants ... */
  70.  
  71. /* Event class ... */
  72.  
  73. #define        kTextServiceClass            kTextService
  74.  
  75. /* event ID ... */
  76.  
  77. #define        kUpdateActiveInputArea    'updt'        /* update the active Inline area */    
  78. #define        kPos2Offset                    'p2st'        /* converting global coordinates to char position */
  79. #define        kOffset2Pos                    'st2p'        /* converting char position to global coordinates */
  80. #define        kShowHideInputWindow        'shiw'        /* show or hide the input window */
  81.  
  82. /* Event keywords ... */
  83.  
  84. #define        keyAETSMDocumentRefcon    'refc'        /* TSM document refcon, typeLongInteger        <#45> */
  85.  
  86.  
  87. #define        keyAEServerInstance        'srvi'        /* component instance */
  88. #define        keyAETheData                'kdat'        /* typeText */
  89. #define        keyAEScriptTag                'sclg'        /* script tag */
  90. #define        keyAEFixLength                'fixl'        /* fix len ?? */
  91. #define        keyAEHiliteRange            'hrng'        /* hilite range array */
  92. #define        keyAEUpdateRange            'udng'        /* update range array */
  93. #define        keyAEClauseOffsets        'clau'        /* Clause Offsets array */
  94.  
  95. #define        keyAECurrentPoint            'cpos'        /* current point */
  96. #define        keyAEDragging                'bool'        /* dragging falg */
  97. #define        keyAEOffset                    'ofst'        /* offset */
  98. #define        keyAERegionClass            'rgnc'        /* region class */
  99. #define        keyAEPoint                    'gpos'        /* current point */
  100. #define        keyAEBufferSize            'buff'        /* buffer size to get the text */
  101. #define        keyAERequestedType        'rtyp'        /* requested text type */
  102. #define        keyAEMoveView                'mvvw'        /* move view flag */
  103. #define        keyAELength                    'leng'        /* length */
  104. #define        keyAENextBody                'nxbd'        /* next or previous body */
  105.  
  106.  
  107. /* optional keywords for Offset2Pos                    -- 28Mar92 <#38> */
  108. #define        keyAETextFont                'ktxf'
  109. #define        keyAETextPointSize        'ktps'
  110. #define        keyAETextLineHeight        'ktlh'
  111. #define        keyAETextLineAscent        'ktas'
  112. #define        keyAEAngle                    'kang'
  113.  
  114.  
  115. /* optional keywords for Pos2Offset                    -- 20May92 <#44> */
  116. #define        keyAELeftSide                'klef'        /* type Boolean */
  117.  
  118. /* optional keywords for kShowHideInputWindow    -- <#48> */
  119. #define        keyAEShowHideInputWindow 'shiw'        /* type Boolean */
  120.  
  121. /* for PinRange  */
  122. #define        keyAEPinRange                'pnrg'        /* <#49> */
  123.  
  124. /* Desc type ... */
  125.  
  126. #define        typeComponentInstance    'cmpi'        /* server instance */
  127. #define        typeTextRangeArray        'tray'        /* text range array */
  128. #define        typeOffsetArray            'ofay'        /* offset array */
  129. #define        typeIntlWritingCode        'intl'        /* script code */
  130. #define        typeQDPoint                    'QDpt'        /* QuickDraw Point */
  131. #define        typeAEText                    'tTXT'        /* Apple Event text */
  132. #define        typeText                        'TEXT'        /* Plain text */
  133.  
  134. #define        typeTextRange                'txrn'        /* <#49> */
  135.  
  136.  
  137.  
  138. /* error codes */
  139.  
  140. #define    tsmComponentNoErr                0                // component result = no error
  141.  
  142.  
  143. #define    tsmUnsupScriptLanguageErr    -2500            //
  144. #define    tsmInputMethodNotFoundErr    -2501            //
  145. #define    tsmNotAnAppErr                    -2502            // not an application error
  146. #define    tsmAlreadyRegisteredErr        -2503            // want to register again error
  147. #define    tsmNeverRegisteredErr        -2504            // app never registered error (not TSM aware)
  148. #define    tsmInvalidDocIDErr            -2505            // invalid TSM documentation id
  149. #define    tsmTSMDocBusyErr                -2506            // document is still active
  150. #define    tsmDocNotActiveErr            -2507            // document is NOT active
  151. #define    tsmNoOpenTSErr                    -2508            // no open text service
  152. #define    tsmCantOpenComponentErr        -2509            // can't open the component
  153. #define    tsmTextServiceNotFoundErr    -2510            // no text service found
  154. #define    tsmDocumentOpenErr            -2511            // there are open documents
  155. #define    tsmUseInputWindowErr            -2512            // not TSM aware because we are using input window
  156. #define    tsmTSHasNoMenuErr                -2513            // the text service has no menu
  157. #define    tsmTSNotOpenErr                -2514            // text service is not open
  158. #define    tsmComponentAlreadyOpenErr    -2515            // text service already opened for the document
  159.  
  160. #define    tsmInputMethodIsOldErr        -2516            // returned by GetDefaultInputMethod
  161. #define    tsmScriptHasNoIMErr            -2517            // script has no imput method or is using old IM.
  162. #define    tsmUnsupportedTypeErr        -2518            // unSupported interface type error
  163. #define    tsmUnknownErr                    -2519            // any other errors
  164.  
  165.  
  166.  
  167.  
  168. /* Desc type constants */
  169.  
  170. typedef enum {
  171.     kTSMOutsideOfBody                    = 1,
  172.     kTSMInsideOfBody                    = 2,
  173.     kTSMInsideOfActiveInputArea    = 3
  174. } AERegionClassType;
  175.  
  176. typedef enum {
  177.     kNextBody                        = 1,
  178.     kPreviousBody                    = 2
  179. } AENextBodyType;
  180.  
  181.  
  182. /* Apple Event error definitions */
  183.  
  184. typedef enum {
  185.     errOffsetInvalid                = -1800,
  186.     errOffsetIsOutsideOfView    = -1801,
  187.     errTopOfDocument                = -1810,
  188.     errTopOfBody                    = -1811,
  189.     errEndOfDocument                = -1812,
  190.     errEndOfBody                    = -1813
  191. } AppleEventErrorType;
  192.  
  193. /*    •• ************************************** ••  */
  194.  
  195.  
  196. struct TextRange {                    /* typeTextRange         'txrn' */
  197.     long    fStart;
  198.     long    fEnd;
  199.     short    fHiliteStyle;
  200. };
  201. typedef struct TextRange TextRange;
  202. typedef TextRange *TextRangePtr;
  203. typedef TextRangePtr *TextRangeHandle;
  204.  
  205.  
  206. struct TextRangeArray {                /* typeTextRangeArray    'txra' */
  207.     short        fNumOfRanges;            /* specify the size of the fRange array */
  208.     TextRange    fRange[1];            /* when fNumOfRanges > 1, the size of this array has to be calculated */
  209. };
  210. typedef struct TextRangeArray TextRangeArray;
  211. typedef TextRangeArray *TextRangeArrayPtr;
  212. typedef TextRangeArrayPtr *TextRangeArrayHandle;
  213.  
  214.  
  215. struct OffsetArray {                    /* typeOffsetArray        'offa' */
  216.     short    fNumOfOffsets;                /* specify the size of the fOffset array */
  217.     long    fOffset[1];                    /* when fNumOfOffsets > 1, the size of this array has to be calculated */
  218. };
  219. typedef struct OffsetArray OffsetArray;
  220. typedef OffsetArray *OffsetArrayPtr;
  221. typedef OffsetArrayPtr *OffsetArrayHandle;
  222.  
  223. /*    •• ************************************** ••  */
  224.  
  225.  
  226. /* extract Script/Language code from Component flag ... */
  227. #define        mGetScriptCode(cdRec)        ((ScriptCode)    ((cdRec.componentFlags & bScriptMask) >> 8))
  228. #define        mGetLanguageCode(cdRec)        ((LangCode)        cdRec.componentFlags & bLanguageMask)
  229.  
  230.  
  231. typedef        void    *TSMDocumentID;
  232. /*    •• ************************************** ••  */
  233.  
  234.  
  235. /*
  236.  *    Text Service Info List
  237.  */
  238. struct TextServiceInfo {
  239.  Component            fComponent;
  240.  Str255                fItemName;
  241. };
  242.  
  243. typedef struct TextServiceInfo TextServiceInfo;
  244. typedef TextServiceInfo *TextServiceInfoPtr;
  245.  
  246.  
  247. struct TextServiceList {
  248.  short                    fTextServiceCount;                /* number of entries in the 'fServices' array */
  249.  TextServiceInfo        fServices[1];                        /* Note: array of 'TextServiceInfo' records follows */
  250. };
  251.  
  252. typedef struct TextServiceList TextServiceList;
  253. typedef TextServiceList *TextServiceListPtr; 
  254. typedef TextServiceListPtr *TextServiceListHandle; 
  255.  
  256.  
  257. struct ScriptLanguageRecord {
  258.  ScriptCode        fScript;
  259.  LangCode        fLanguage;
  260. };
  261.  
  262. typedef struct ScriptLanguageRecord ScriptLanguageRecord;
  263.  
  264.  
  265. struct ScriptLanguageSupport {
  266.  short                        fScriptLanguageCount;        /* number of entries in the 'fScriptLanguageArray' array */
  267.  ScriptLanguageRecord    fScriptLanguageArray[1];    /* Note: array of 'ScriptLanguageRecord' records follows */
  268. };
  269.  
  270. typedef struct ScriptLanguageSupport ScriptLanguageSupport;
  271. typedef ScriptLanguageSupport *ScriptLanguageSupportPtr; 
  272. typedef ScriptLanguageSupportPtr *ScriptLanguageSupportHandle; 
  273.  
  274. /*    •• ************************************** ••  */
  275.  
  276.  
  277.  
  278.  
  279. #define    TSMTrapNum        0xAA54
  280.  
  281. /* ••    Text Services Manager function selectors ... */
  282.  
  283. /* ••    High level routines ... */
  284. #define    kNewTSMDocument                0        // create new TSM aware document
  285. #define    kDeleteTSMDocument            1        // delete TSM aware document
  286. #define    kActivateTSMDocument            2        // activate TSM aware document
  287. #define    kDeactivateTSMDocument        3        // deactivate TSM aware document
  288. #define    kTSMEvent                        4        // pass all events to TSM
  289. #define    kTSMMenuSelect                    5        // pass menu selection to TSM
  290. #define    kSetTSMCursor                    6        // set the cursor
  291. #define    kFixTSMDocument                7        // terminate text services
  292. #define    kGetServiceList                8        // get all text service components
  293. #define    kOpenTextService                9        // open  the text service
  294. #define    kCloseTextService                10        // close the text service
  295. #define    kSendAEFromTSMComponent        11        // send Apple Event to client
  296.  
  297.  
  298. /* ••    Utilities ... */
  299.  
  300. #define    kSetDefaultInputMethod        12        // 
  301. #define    kGetDefaultInputMethod        13        // 0x0D
  302. #define    kSetTextServiceLanguage        14        // Called by Script Mgr
  303. #define    kGetTextServiceLanguage        15        // 
  304. #define    kUseInputWindow                16        // 
  305. #define    kNewServiceWindow                17        // 
  306. #define    kCloseServiceWindow            18        // 
  307. #define    kGetFrontServiceWindow        19        // 
  308.  
  309.  
  310. #define    kInitTSMAwareApplication    20        // claim TSM aware application
  311. #define    kCloseTSMAwareApplication    21        // application deregisters itself as TSM aware
  312.  
  313. #define    kFindServiceWindow            23
  314.  
  315.  
  316. /*    •• ************************************** ••  */
  317.  
  318.  
  319.  
  320.  
  321. /* High level TSM routines .. */
  322.  
  323. pascal OSErr NewTSMDocument(short numOfInterface,        OSType supportedInterfaceTypes[],
  324.                                      TSMDocumentID *idocID,        long     refcon)
  325. = { 0x303C,kNewTSMDocument, TSMTrapNum };                    /* MOVE.W    #selector,D0        */
  326.  
  327. pascal OSErr DeleteTSMDocument(TSMDocumentID idocID)
  328. = { 0x303C, kDeleteTSMDocument, TSMTrapNum };
  329.  
  330. pascal OSErr ActivateTSMDocument(TSMDocumentID idocID)
  331. = { 0x303C, kActivateTSMDocument, TSMTrapNum };
  332.  
  333. pascal OSErr DeactivateTSMDocument(TSMDocumentID idocID)
  334. = { 0x303C, kDeactivateTSMDocument, TSMTrapNum };
  335.  
  336. pascal Boolean TSMEvent(EventRecord *event)                                     // pass all events to TSM (removed TSMDocumentID #35)
  337. = { 0x303C, kTSMEvent, TSMTrapNum };
  338.  
  339. pascal Boolean TSMMenuSelect(long menuResult)                                 // pass menu selection to TSM (removed TSMDocumentID #35)
  340. = { 0x303C, kTSMMenuSelect, TSMTrapNum };
  341.  
  342. pascal Boolean SetTSMCursor(Point mousePos)                                     // set the cursor (removed TSMDocumentID #35)
  343. = { 0x303C, kSetTSMCursor, TSMTrapNum };
  344.  
  345. pascal OSErr FixTSMDocument(TSMDocumentID idocID)                             // terminate text services
  346. = { 0x303C, kFixTSMDocument, TSMTrapNum };
  347.  
  348. pascal OSErr GetServiceList(short            numOfInterface,
  349.                             OSType                        supportedInterfaceTypes[],
  350.                             TextServiceListHandle    *serviceInfo,
  351.                             long                            *seedValue)                     // get all text services
  352. = { 0x303C, kGetServiceList, TSMTrapNum };
  353.  
  354. pascal OSErr OpenTextService(TSMDocumentID idocID, Component aComponent, ComponentInstance *aComponentInstance) 
  355. = { 0x303C, kOpenTextService, TSMTrapNum };                                    // open the text service (return instance)
  356.  
  357.  
  358. pascal OSErr CloseTextService(TSMDocumentID idocID, ComponentInstance aComponentInstance)
  359. = { 0x303C, kCloseTextService, TSMTrapNum };                                     // close the text service (return instance)
  360.  
  361.  
  362.  
  363. /* Sending callback AppleEvents ... */
  364. pascal OSErr SendAEFromTSMComponent(AppleEvent        *theAppleEvent,    // should be a pointer
  365.                             AppleEvent                *reply, 
  366.                             AESendMode                sendMode,
  367.                             AESendPriority            sendPriority,
  368.                             long                        timeOutInTicks,
  369.                             IdleProcPtr                idleProc,
  370.                             EventFilterProcPtr    filterProc )
  371. = { 0x303C, kSendAEFromTSMComponent, TSMTrapNum };
  372.  
  373. pascal OSErr InitTSMAwareApplication()                                         // app registers itself as TSM aware
  374. = { 0x303C, kInitTSMAwareApplication, TSMTrapNum };
  375.  
  376.  
  377. pascal OSErr CloseTSMAwareApplication()                                         // app deregisters itself when quit
  378. = { 0x303C, kCloseTSMAwareApplication, TSMTrapNum };
  379.  
  380.  
  381.  
  382.  
  383. /* ••  Utilities ... */
  384. pascal OSErr SetDefaultInputMethod ( Component  ts, ScriptLanguageRecord *slRecordPtr )
  385. = { 0x303C, kSetDefaultInputMethod, TSMTrapNum };
  386.  
  387. pascal OSErr GetDefaultInputMethod ( Component *ts, ScriptLanguageRecord *slRecordPtr )
  388. = { 0x303C, kGetDefaultInputMethod, TSMTrapNum };
  389.  
  390. pascal OSErr SetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  391. = { 0x303C, kSetTextServiceLanguage, TSMTrapNum };
  392.  
  393. pascal OSErr GetTextServiceLanguage( ScriptLanguageRecord *slRecordPtr )
  394. = { 0x303C, kGetTextServiceLanguage, TSMTrapNum };
  395.  
  396. pascal OSErr UseInputWindow( TSMDocumentID idocID, Boolean useWindow )
  397. = { 0x303C, kUseInputWindow, TSMTrapNum };
  398.  
  399. pascal OSErr NewServiceWindow(void            *wStorage,
  400.                                 const Rect            *boundsRect,
  401.                                 ConstStr255Param    title,
  402.                                 Boolean                visible,
  403.                                 short                    theProc,
  404.                                 WindowPtr            behind,
  405.                                 Boolean                goAwayFlag,
  406.                                 ComponentInstance    ts,
  407.                                 WindowPtr            *window )
  408. = { 0x303C, kNewServiceWindow, TSMTrapNum };
  409.  
  410. pascal OSErr CloseServiceWindow(WindowPtr window )
  411. = { 0x303C, kCloseServiceWindow, TSMTrapNum };
  412.  
  413. pascal OSErr GetFrontServiceWindow(WindowPtr *window )
  414. = { 0x303C, kGetFrontServiceWindow, TSMTrapNum };
  415.  
  416. pascal short FindServiceWindow(Point thePoint,WindowPtr *theWindow)
  417. = { 0x303C, kFindServiceWindow, TSMTrapNum };
  418.  
  419.  
  420.  
  421. /* ••    Low level routines which are dispatched directly to the Component Manager ... */
  422.  
  423. #define    kCMGetScriptLangSupport        0x0001        // Component Manager call selector 1
  424. #define    kCMInitiateTextService        0x0002        // Component Manager call selector 2
  425. #define    kCMTerminateTextService        0x0003        // Component Manager call selector 3
  426. #define    kCMActivateTextService        0x0004        // Component Manager call selector 4
  427. #define    kCMDeactivateTextService    0x0005        // Component Manager call selector 5
  428. #define    kCMTextServiceEvent            0x0006        // Component Manager call selector 6
  429. #define    kCMGetTextServiceMenu        0x0007        // Component Manager call selector 7
  430. #define    kCMTextServiceMenuSelect    0x0008        // Component Manager call selector 8
  431. #define    kCMFixTextService                0x0009        // Component Manager call selector 9
  432. #define    kCMSetTextServiceCursor        0x000A        // Component Manager call selector 10
  433. #define    kCMHidePaletteWindows        0x000B        // Component Manager call selector 11            <#37>
  434.  
  435.  
  436. /* ••  Low level TSM routines ... */
  437.  
  438. pascal ComponentResult GetScriptLanguageSupport(ComponentInstance ts, ScriptLanguageSupportHandle *scriptHdl)
  439.  = {0x2F3C,0x04,kCMGetScriptLangSupport,0x7000,0xA82A};            /* selector = 1 */
  440.  
  441.  
  442. pascal ComponentResult InitiateTextService(ComponentInstance ts)
  443.  = {0x2F3C,0x00,kCMInitiateTextService,0x7000,0xA82A};            /* selector = 2 */
  444.  
  445.  
  446. pascal ComponentResult TerminateTextService(ComponentInstance ts)
  447.  = {0x2F3C,0x00,kCMTerminateTextService,0x7000,0xA82A};            /* selector = 3 */
  448.  
  449.  
  450. pascal ComponentResult ActivateTextService(ComponentInstance ts)
  451.  = {0x2F3C,0x00,kCMActivateTextService,0x7000,0xA82A};            /* selector = 4 */
  452.  
  453.  
  454. pascal ComponentResult DeactivateTextService(ComponentInstance ts)
  455.  = {0x2F3C,0x00,kCMDeactivateTextService,0x7000,0xA82A};            /* selector = 5 */
  456.  
  457.  
  458. pascal ComponentResult TextServiceEvent(ComponentInstance ts, short numOfEvents, EventRecord *event)
  459.  = {0x2F3C,0x06,kCMTextServiceEvent,0x7000,0xA82A};                /* selector = 6 */
  460.  
  461.  
  462. pascal ComponentResult GetTextServiceMenu(ComponentInstance ts, MenuHandle *serviceMenu)
  463.  = {0x2F3C,0x4,kCMGetTextServiceMenu,0x7000,0xA82A};                /* selector = 7 */
  464.  
  465.  
  466. pascal ComponentResult TextServiceMenuSelect(ComponentInstance ts, MenuHandle serviceMenu, short item)
  467.  = {0x2F3C,0x06,kCMTextServiceMenuSelect,0x7000,0xA82A};            /* selector = 8 */
  468.  
  469.  
  470. pascal ComponentResult FixTextService(ComponentInstance ts)
  471.  = {0x2F3C,0x00,kCMFixTextService,0x7000,0xA82A};                    /* selector = 9 */
  472.  
  473.  
  474. pascal ComponentResult SetTextServiceCursor(ComponentInstance ts, Point mousePos)
  475.  = {0x2F3C,0x04,kCMSetTextServiceCursor,0x7000,0xA82A};            /* selector = 10 */
  476.  
  477.  
  478. pascal ComponentResult HidePaletteWindows(ComponentInstance ts)
  479.  = {0x2F3C,0x00,kCMHidePaletteWindows,0x7000,0xA82A};                /* selector = 11                    <#37> */
  480.  
  481.  
  482.  
  483. #endif